跳到主要内容

了解数据来源及轮廓,进行探索性分析

搞清数据原始出处

在做分析之前,要先准备好最最原始的数据,我们需要知道原始数据的采集过程,以及是否做过相关简化。这个问题比较重要 --- 如果想要挖水喝, 那么我们需要确定挖的地方究竟有没可能有水。如果在一堆不靠谱的数据上分析半天,那么别想得出什么有用的结论。在计算机科学里面有个词专门对这件事进行描述,就是 GIGO(garbage in, garbage out 垃圾进去,垃圾出来)。

如果我们要和别人合作,这件事就更为重要,有了相同的原始数据,才会有相同的统计或计算口径, 进而得出有用的结论。

搞清数据轮廓(分布),进行探索性数据分析

在我们获得数据之后,要对数据进行一次粗略的体检(这一步仍然是为了保证数据里面少一点垃圾)。在体检过程中,我们需要大致了解数据中的各个指标是怎么分布的,这些分布会不会对问题的解决造成影响,会不会影响模型的建立。

举两个机器学习里面的经典例子:

  • 假如我们有 10000个患者同一肿瘤部位的图片,并且知道每个患者的肿瘤是良性还是恶性,我们想根据这些图片找到一个神奇的公式,能直接通过查看图片得知其他患者的肿瘤是否恶性。 我们经过各种试验,得到了一个准确率为 90%的办法。还不错, 对吗? 但事实上,假如这 10000个患者中只有 100个患者的肿瘤是恶性的,完全可以很容易地粗制滥造出一个方法 —— 滥造的方法是推断任何患者的肿瘤都是良性的,那么,这个方法在原来 10000个患者那里试验的准确率是 (10000-100)/10000=99%。 这就是没有搞清楚数据分布就草草动手的结果。
  • 传说某国国防部想研究如何通过图片识别树后的坦克,他们收集了很多不同的照片作为试验样本,终于得到了一个方法,可以识别出含有坦克的图片。但在实际运用中却发现这个方法行不通。原来,因为试验样本的问题,凑巧有坦克的样本照片大部分是阴天,没有坦克的大部分是晴天,之前的方法只是通过图片的明亮区分阴晴而已。

在数据分析行业里面,这一部分工作也被称为 Exploratory Data Analysis(EDA) --- 探索性数据分析。我们越了解我们正在为模型提供什么数据,那么就越有可能理解模型的输出。可以使用一些可视化工具来了解数据,重点了解数据的分布、缺失、异常、变量之间的强相关性等等一些数据质量问题。

一个好例子

企鹅智酷曾经发表的 二线城市 “抢人”背后:中国城市人群迁移意向报告 就是一个正面例子。

他的问题是

北上广深之外, 哪些城市是潜在的人才磁铁? “我要离开吗?” “在一线城市的辛苦拼搏,和三四线城市的相对安逸之间,是否存在一个折中的选择?”

先不管结论,看一下他的数据来源说明以及细化问题的过程

数据来源说明以及细化问题的过程

数据来源说明以及细化问题的过程

他的数据分布,考虑到了调研谁,男女是否平衡,调研的主要城市,还有和问题比较强相关的房产事宜,如下图所示:

样本描述

样本描述

另外一个例子

在 Kaggle 的一个机器学习的入门课其中的一节数据探索实验中,Dan Becker 讲了这样一个例子,就是我们在很多入门课中经常见到的房价预测的问题。给了我们一系列和房价有关的数据以及对应的房价之后,又给一套房产参数,让我们预测这套房子的价格。但在预测之前,Dan 问了这样一个问题,看上去我们现有的数据有点旧,这是什么原因呢?可能是:

  1. 在数据收集之后,这个地区基本没有建造新房子?
  2. 或者是这个数据是以前收集的,之后的数据它并没有更新?

如果是原因1,那么最后建立的模型会有什么潜在问题?如果是原因2,那么模型又会有什么潜在问题?而且,究竟是原因1 还是原因2 呢?对于房子这样的问题,也许我们能够直观猜测,这个地区不可能没建造新房子,但是如果换成其他的数据,我们也许就不会有这样的直观猜测了,我们需要确切的证据来说明到底是什么原因。关于此问题的具体讨论,请前往 Kaggle 上关于这个问题的帖子进行了解。

就这样一个看上去似乎很无关紧要的 小问题,严重影响了我们具体要怎么处理数据,影响了模型的建立。所以了解我们的数据来源,搞清数据分布等一些基本情况,有可能会让我们还没做模型时,就能估算到模型的最终效果。